package generic;

/*
* 定义在类上泛型
*   格式:
*       class 类名<Q,A,E...>{//<E,Q,A,...> 泛型变量
*       //在类中就可以使用泛型变量
* }
*   1.类上的泛型可以在类中直接使用
*   2.类上的泛型在创建对象时指定其具体类型
*   3.如果创建对象是不指定泛型的具体类型,会被默认替换为Object类型
*   4.静态方法不能使用类上泛型,因为静态方法可以通过类名直接调用,无法确定泛型的具体类型
* */
public class GenericDemo02<Q> {
    public void method01(Q q){//在方法上使用了类上定义的泛型
                              //Q 泛型变量
                              //q 变量名
        System.out.println(q);
    }
    //静态方法不能使用类上泛型
    //静态方法的调用可以直接通过类名直接调用,无法确定泛型的具体类型
    //而非静态方法是通过创建对象来指定泛型的具体类型
 /*   public static void method02(Q q){

    }*/

    public static void main(String[] args) {
        //在声明对象时,通过<>来指定具体类型
        //例如<String>就代表String代替了<>内的Q,类上的方法一旦被确定为String,类中所有用到Q的地方都会被替换成String
        //GenericDemo02<String> gd01 = new GenericDemo02<String>();
        GenericDemo02<String> gd01 = new GenericDemo02<>();//该写法与上面的方法等效
        gd01.method01("abc");

        GenericDemo02<Integer> gd02 = new GenericDemo02<>();
        gd02.method01(12);

        GenericDemo02<Object> gd03 = new GenericDemo02<>();//如果不写<>中类型,则会默认为Object类型
        gd03.method01(1.3);
    }

}
